package com.sp.reactive;

import org.junit.jupiter.api.Test;
import reactor.core.publisher.Flux;

/**
 * buffer操作符的作用相当于把当前流中的元素统一收集到一个集合中,并把这个集合对象作为新的数据流
 * window操作符的作用类似于buffer,不同的是window操作符,是把当前流中的元素收集到另外的 Flux 序列中, 而不是一个集合
 *
 * @author 宫静雨
 * @version 1.0
 * @since 2023-04-16 15:50:51
 */
public class TransformingTest {

    @Test
    public void flatmap1() {
        Flux.range(1, 3)
                .flatMap(v -> Flux.just(v * v, v * 2))
                .subscribe(System.out::println);
    }

    @Test
    public void map1() {
        Flux.range(1, 3)
                .map(v -> v * 2)
                .subscribe(System.out::println);
    }

    @Test
    public void window1() {
        Flux.range(1, 25)
                .window(10)
                .toIterable()
                .forEach(w -> {
                    w.subscribe(System.out::println);
                    System.out.println("--------------------");
                });
    }

    @Test
    public void buffer1() {
        Flux.range(1, 25)
                .buffer(10)
                .subscribe(System.out::println);
    }

}
